package com.ft.oa.domain.project;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ft.oa.domain.Attachment;
import com.ft.oa.domain.development.NeedAnalyse;
import com.ft.oa.domain.dto.knowledgeBase.AttachmentDto;
import com.ft.oa.utils.SecurityUtils;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 项目立项表实体
 * @author hefeng
 * @ClassName ExecProject
 * @date 2021/12/30 10:47
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(value = "exec_project",autoResultMap = true)
public class ExecProject {

    /**
     * 主键id
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 关联表主键
     */
    @TableField(exist = false)
    private Long relationId;

    /**
     * 父项目编码
     */
    private String parentProjectNumber;

    /**
     * 项目名称
     */
    private String name;

    /**
     * 父项目名称(父项目名称不入表)
     */
    //@TableField(exist = false)
    private String parentName;

    /**
     * 项目编号
     */
    private String projectNumber;

    /**
     * 项目经理(负责人)id
     */
    private Long responsibilityUserId;

    /**
     * 项目经理(负责人)名称（名称不入表）
     */
    //@TableField(exist = false)
    private String responsibilityUserName;

    /**
     * 售前项目id
     */
    private Long clueProjectId;

    /**
     * 售前项目名称（名称不入表）
     */
    //@TableField(exist = false)
    private String clueProjectName;

    /**
     * 客户对接人id(字符串输入不需要该字段)
     */
    //private Long customerId;

    /**
     * 客户对接人名称
     */
    private String customerName;

    /**
     * 客户对接人手机
     */
    private String customerPhone;

    /**
     * 项目合同总额
     */
    private BigDecimal totalMoney;

    /**
     * 项目预算
     */
    private BigDecimal planMoney;

    /**
     * 项目预算(带人民币符号)
     */
    @TableField(exist = false)
    private String planMoneyName;

    /**
     * 其他备注信息
     */
    private String otherContent;


    /**
     * 区分主子项目sub-子项目  par-父项目
     */
    private String searchType;

    /**
     * 项目开始时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private LocalDate startDate;

    /**
     * 项目结束时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private LocalDate endDate;

    /**
     * 创建人id
     */
    private Long creator = SecurityUtils.getCurrentUser().getId();

    /**
     * 创建时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime = LocalDateTime.now();

    /**
     * 修改时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime = LocalDateTime.now();

    /**
     * 修改人id
     */
    private Long editor = SecurityUtils.getCurrentUser().getId();

    /**
     * 子项目参与阶段：
     */
    private String subStages;

    /**
     * 子项目参与合同
     */
    private String subContracts;

    /**
     * 权重
     */
    private BigDecimal weight;

    /**
     * 子项目类型 0自研产品实施,1集成产品实施,2研发定制开发
     */
    private Integer type;

    /**
     * 子项目类型 0自研产品实施,1集成产品实施,2研发定制开发
     */
    @TableField(exist = false)
    private String typeName;

    /**
     * 附件id  字符串拼接  1，2，3，4
     */
    private String fileIds;

    //一下是非数据库对应字段、用于列表展示 start

    /**
     * 项目阶段 0需求调研,1方案设计,2设备采购,3系统安装,4物流发货,5现场调试,6现场培训,7项目验收
     */
    @TableField(exist = false)
    private Integer projectStage;

    /**
     * 项目风险0-良好  1-低风险  2-中风险 3-高风险
     */
    @TableField(exist = false)
    private Integer projectRisk;

    /**
     * 项目成本
     */
    @TableField(exist = false)
    private String projectCost;

    /**
     * 项目进度
     */
    @TableField(exist = false)
    private String projectProgress;

    /**
     * 项目状态 0-待立项 1-进行中
     */
    @TableField(exist = false)
    private Integer projectStatus;

    /**
     * 子项目状态 0-待执行 1-进行中 2-已完成 3-已终止
     */
    @TableField(exist = false)
    private Integer subProjectStatus;

    /**
     * 计划进度
     */
    @TableField(exist = false)
    private String designSchedule;

    /**
     * 实际进度
     */
    @TableField(exist = false)
    private String actualProgress;

    /**
     * 审核状态 0-审核中  1-通过  2-驳回
     */
    //@TableField(exist = false)
    private Integer approvalStatus;

    //一下是非数据库对应字段、用于列表展示 end

    /**
     * 招投标新项目id   该字段在项目管理-待立项-申请立项时存入
     */
    private Long bidProjectId;

    /**
     * 是否创建研发需求
     */
    private Integer created;

    /**
     * 列表显示子项目
     */
    @TableField(exist = false)
    List<ExecProject> children;

    /**
     * 合同
     */
    @TableField(exist = false)
    private List<ExecProjectContract> contracts;

    //以下为附件上传用到
    /**
     * 接收前端传递数据
     */
    @TableField(exist = false)
    private List<AttachmentDto> attachments;

    //attachments附件上传json存储字段
    private String achment;

    @TableField(exist = false)
    private List<Attachment> attachment;

}
